home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-19 / iritsm3s.zip / PLATONIC.IRT < prev    next >
Text File  |  1991-12-15  |  4KB  |  156 lines

  1. #
  2. # Constructs the five Platonic Solids.
  3. #
  4. #                    Gershon Elber Dec. 1991.
  5. #
  6.  
  7. g = (sqrt( 5 ) + 1) / 2; # The golden ratio
  8. q = g - 1;
  9.  
  10. normal(1,0.2,yellow);
  11.  
  12. #
  13. # Tetrahedron
  14. #
  15.  
  16. v1 = vector(  1,  1,  1 );
  17. v2 = vector(  1, -1, -1 );
  18. v3 = vector( -1,  1, -1 );
  19. v4 = vector( -1, -1,  1 );
  20.  
  21. pl1 = poly( list( v1, v3, v2 ) );
  22. pl2 = poly( list( v1, v4, v3 ) );
  23. pl3 = poly( list( v1, v2, v4 ) );
  24. pl4 = poly( list( v2, v3, v4 ) );
  25.  
  26. tetra = mergepoly( list( pl1, pl2, pl3, pl4 ) );
  27.  
  28. interact( tetra, false );
  29.  
  30.  
  31. #
  32. # Cube
  33. #
  34.  
  35. v1 = vector( -1, -1, -1 );
  36. v2 = vector( -1, -1,  1 );
  37. v3 = vector( -1,  1,  1 );
  38. v4 = vector( -1,  1, -1 );
  39. v5 = vector(  1, -1, -1 );
  40. v6 = vector(  1, -1,  1 );
  41. v7 = vector(  1,  1,  1 );
  42. v8 = vector(  1,  1, -1 );
  43.  
  44. pl1 = poly( list( v4, v3, v2, v1 ) );
  45. pl2 = poly( list( v5, v6, v7, v8 ) );
  46. pl3 = poly( list( v1, v2, v6, v5 ) );
  47. pl4 = poly( list( v2, v3, v7, v6 ) );
  48. pl5 = poly( list( v3, v4, v8, v7 ) );
  49. pl6 = poly( list( v4, v1, v5, v8 ) );
  50.  
  51. cube = mergepoly( list( pl1, pl2, pl3, pl4, pl5, pl6 ) );
  52.  
  53. interact( cube, false );
  54.  
  55. #
  56. # Octahedron
  57. #
  58.  
  59. v1 = vector(  0,  0,  1 );
  60. v2 = vector(  1,  0,  0 );
  61. v3 = vector(  0,  1,  0 );
  62. v4 = vector( -1,  0,  0 );
  63. v5 = vector(  0, -1,  0 );
  64. v6 = vector(  0,  0, -1 );
  65.  
  66. pl1 = poly( list( v1, v3, v2 ) );
  67. pl2 = poly( list( v1, v4, v3 ) );
  68. pl3 = poly( list( v1, v5, v4 ) );
  69. pl4 = poly( list( v1, v2, v5 ) );
  70. pl5 = poly( list( v6, v2, v3 ) );
  71. pl6 = poly( list( v6, v3, v4 ) );
  72. pl7 = poly( list( v6, v4, v5 ) );
  73. pl8 = poly( list( v6, v5, v2 ) );
  74.  
  75. octa = mergepoly( list( pl1, pl2, pl3, pl4, pl5, pl6, pl7, pl8 ) );
  76.  
  77. interact( octa, false );
  78.  
  79.  
  80. #
  81. # Dodecahedron
  82. #
  83.  
  84. v1  = vector(  0,  q,  g );
  85. v2  = vector(  0, -q,  g );
  86. v3  = vector(  1,  1,  1 );
  87. v4  = vector(  1, -1,  1 );
  88. v5  = vector( -1, -1,  1 );
  89. v6  = vector( -1,  1,  1 );
  90. v7  = vector( -g,  0,  q );
  91. v8  = vector(  g,  0,  q );
  92. v9  = vector(  q,  g,  0 );
  93. v10 = vector( -q,  g,  0 );
  94. v11 = vector( -q, -g,  0 );
  95. v12 = vector(  q, -g,  0 );
  96. v13 = vector( -g,  0, -q );
  97. v14 = vector(  g,  0, -q );
  98. v15 = vector(  1,  1, -1 );
  99. v16 = vector( -1,  1, -1 );
  100. v17 = vector( -1, -1, -1 );
  101. v18 = vector(  1, -1, -1 );
  102. v19 = vector(  0,  q, -g );
  103. v20 = vector(  0, -q, -g );
  104.  
  105. pl1  = poly( list( v2, v1, v3, v8, v4 ) );
  106. pl2  = poly( list( v1, v2, v5, v7, v6 ) );
  107. pl3  = poly( list( v1, v3, v9, v10, v6 ) );
  108. pl3  = poly( list( v6, v10, v9, v3, v1 ) );
  109. pl4  = poly( list( v2, v4, v12, v11, v5 ) );
  110. pl5  = poly( list( v4, v8, v14, v18, v12 ) );
  111. pl6  = poly( list( v5, v7, v13, v17, v11 ) );
  112. pl6  = poly( list( v11, v17, v13, v7, v5 ) );
  113. pl7  = poly( list( v13, v16, v10, v6, v7 ) );
  114. pl8  = poly( list( v16, v19, v15, v9, v10 ) );
  115. pl9  = poly( list( v3, v9, v15, v14, v8 ) );
  116. pl10 = poly( list( v14, v15, v19, v20, v18 ) );
  117. pl11 = poly( list( v12, v18, v20, v17, v11 ) );
  118. pl12 = poly( list( v17, v13, v16, v19, v20 ) );
  119. pl12 = poly( list( v20, v19, v16, v13, v17 ) );
  120.  
  121. dodeca = mergepoly( list( pl1, pl2, pl3, pl4, pl5, pl6,
  122.               pl7, pl8, pl9, pl10, pl11, pl12 ) );
  123.  
  124. interact( dodeca, false );
  125.  
  126. #
  127. # Icosahedron (Note we construct only its upper half and reflect it).
  128. #
  129.  
  130. v1  = vector(  1,  0,  g );
  131. v2  = vector( -1,  0,  g );
  132. v3  = vector(  0,  g,  1 );
  133. v4  = vector(  0, -g,  1 );
  134. v5  = vector(  g,  1,  0 );
  135. v6  = vector( -g,  1,  0 );
  136. v7  = vector( -g, -1,  0 );
  137. v8  = vector(  g, -1,  0 );
  138. v9  = vector(  0,  g, -1 );
  139.  
  140. pl1  = poly( list( v2, v3, v1 ) );
  141. pl2  = poly( list( v1, v4, v2 ) );
  142. pl3  = poly( list( v2, v6, v3 ) );
  143. pl4  = poly( list( v3, v5, v1 ) );
  144. pl5  = poly( list( v3, v9, v5 ) );
  145. pl6  = poly( list( v3, v6, v9 ) );
  146. pl7  = poly( list( v2, v7, v6 ) );
  147. pl8  = poly( list( v2, v4, v7 ) );
  148. pl9  = poly( list( v1, v8, v4 ) );
  149. pl10 = poly( list( v1, v5, v8 ) );
  150.  
  151. icosa1 = mergepoly( list( pl1, pl2, pl3, pl4, pl5, pl6, pl7, pl8, pl9, pl10 ) );
  152. icosa2 = icosa1 * rotx( 180 );
  153. icosa = mergepoly( list( icosa1, icosa2 ) );
  154.  
  155. interact( icosa, false );
  156.